A data storage system is typically able to service “data write” or “data read” requests issued by a host computer. A host may be connected to the storage system's external controller or interfaces (IF), through various channels that transfer both data and control information (i.e. control signals). Physical non-volatile media in which data may be permanently or semi-permanently stored includes arrays of disk devices, magnetic or optical, which are relatively less expensive than semiconductor based volatile memory (e.g. Random Access Memory) but are relatively much slower in being accessed.
A cache memory is a high-speed buffer located between an IF and the disk device(s), which is meant to reduce the overall latency of Input/Output (I/O) activity between the storage system and a host accessing data on the storage system. Whenever a host requests data stored in a memory system, the request may be served with significantly lower latency if the requested data is already found in cache, since this data must not be brought from the disks. As of the year 2004, speeds of IO transactions involving disk activity are typically on the order of 5-10 milliseconds, whereas IO speeds involving cache (e.g. RAM memory) access are on the order of several nanoseconds.
In data storage systems, data may be internally managed in terms of functional data units hereafter called “partitions”. When the cache receives new data which is to be written into the cache, the cache determines with which partition the new data is associated and whether storage space in the cache is already allocated for the partition with which the new data is associated. If it is determined that the cache has already allocated storage space for the partition with which the new data is associated, the cache will simply store the data in the storage space allocated for that partition. However, if it is determined that the cache has yet to allocate storage space for the partition with which the new data is associated, the cache must allocate storage space corresponding to an entire partition in order to store the new data, even if the amount of storage space necessary to store the segment of data which is to be written into the cache constitutes only a small fraction of the storage space allocated for each partition.
Typically, partitions are also the unit of reference used by the cache management modules and algorithms for analyzing some global aspects of the cache's performance and for implementing various management procedures or functions, such as, for example, collection and analysis of information relating to data currently in the cache, management of cache replacement mechanisms or procedures, prefetch operations and the exchange of data with other components of the mass-storage system.
The partition's dual functionality presents a well-known yet persistently challenging predicament. On the one hand, larger, and consequently, fewer, partitions in the cache imply lower management overhead. On the other hand, if substantially large partitions are implemented in the cache, a large amount of precious cache storage space may be allocated for storing even small amounts of data. The result is that the cache's memory space is not being allocated efficiently.
There is thus a need for a method, a system and a circuit for efficiently managing a cache storage device. There is a further need for a method, a system and a circuit for providing a cache storage device characterized in low management overhead costs and, at the same time, maintaining efficient allocation of the cache's storage space.